package 泛型2和JDK新增语法特性;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-14
 * Time: 21:16
 */
/*解释这个->
public class MyArray<E extends Comparable<E>> {
...
}
 */
//写一个泛型类 当中有个方法 可以就出数组的最大值
class Alg<E extends Comparable<E>> {//当代码进行编译的时候，就会有“擦除”机制，没有所谓的泛型，全部变成了Object类
    //<E extends Comparable<E>> 这样就有指定的类型边界E ,继承于Comparable
    public E findMax(E array[]) {
        E max = array[0];
        for (int i = 0; i < array.length; i++) {
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}
class Alg2 {//当代码进行编译的时候，就会有“擦除”机制，没有所谓的泛型，全部变成了Object类
    //<E extends Comparable<E>> 这样就有指定的类型边界E ,继承于Comparable
    public <E extends Comparable<E>> E findMax(E array[]) {
        E max = array[0];
        for (int i = 0; i < array.length; i++) {
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}
class Alg3 {
    public static <E extends Comparable<E>> E findMax(E[] array) {
        E max = array[0];
        for (int i = 0; i < array.length; i++) {
            if(array[i].compareTo(max) > 0) {
                max = array[i];
            }
        }
        return max;
    }
}
//变成泛型
public class TestGeneric {
    public static void main(String[] args) {
        Integer[] array = {1, 3, 4, 6, 7, 8, 9, 0};
        System.out.println(Alg3.findMax(array));
    }
    //泛型方法 -> 定义语法：方法限定符<类型形参列表>返回值类型 方法名称(形参列表){...}
    public static void main2(String[] args) {
        Alg2 alg2 = new Alg2();
        Integer[] array = {1, 2, 3, 4, 5};
        System.out.println(alg2.findMax(array));
    }
    public static void main1(String[] args) {
        Integer[] array = {2, 3, 4, 1, 2, 3, 5, 6};
        Alg<Integer> alg = new Alg<>();
        Integer ret = alg.<Integer>findMax(array);
        System.out.println(ret);
    }
}
